package com.hbnu.cmd.view;

import com.hbnu.cmd.controller.LoginController;
import com.hbnu.cmd.util.Input;

/**
 * 登录视图，作为打卡记录系统的入口视图，负责展示登录相关菜单、接收用户输入，并衔接后续业务视图。
 * 依赖 {@link LoginController} 处理登录/忘记密码业务，通过构造函数注入 {@link Input} 统一管理输入资源。
 */

public class LoginView {
    private static final Input input = Input.getInstance();
    private final LoginController loginController = new LoginController();

    /**
     * 展示系统入口菜单，循环接收用户操作选择，直到用户选择退出。
     */
    public void show() {
        System.out.println("===== 欢迎使用打卡记录系统 =====");

        while (true) {
            System.out.println("\n请选择操作：");
            System.out.println("1. 登录");
            System.out.println("2. 注册");
            System.out.println("3. 退出");
            System.out.println("4. 忘记密码？");
            System.out.print("输入数字(1-4)：");

            Integer choice = input.readInt();
            if (choice == null) {
                System.err.println("输入异常，请重试！");
                continue;
            }

            switch (choice) {
                case 1:
                    handleLogin();
                    break;
                case 2:
                    handleRegister();
                    break;
                case 3:
                    handleExit();
                    return;
                case 4:
                    handleForgetPassword();
                    break;
                default:
                    System.out.println("输入错误，请重新选择！");
            }
        }
    }

    /**
     * 处理登录流程：接收用户名密码，调用Controller校验，成功则跳转主业务菜单。
     */
    private void handleLogin() {
        System.out.println("\n===== 登录 =====");

        System.out.print("请输入用户名：");
        String username = input.readLineTrim();

        System.out.print("请输入密码：");
        String password = input.readLineTrim();

        loginController.handleLogin(username, password);
    }

    /**
     * 处理注册流程：调用注册视图，注册完成后返回登录菜单。
     */
    private void handleRegister() {
        loginController.handleRegister();
    }

    /**
     * 处理退出流程：提示再见。
     */
    private void handleExit() {
        loginController.handleExit();
        System.out.println("感谢使用！再见~");
        input.close();
    }

    /**
     * 处理忘记密码流程：调用Controller展示提示信息。
     */
    private void handleForgetPassword() {
        loginController.handleForgetPassword();
    }
}
